DROP PROCEDURE IF EXISTS get_next_number;
DELIMITER //
CREATE PROCEDURE get_next_number(IN p_code VARCHAR(10), OUT next_number VARCHAR(20))
BEGIN
    DECLARE today DATE;
    DECLARE formatted_date CHAR(6);
    DECLARE current_counter INT;
    SET today = CURDATE();
    SET formatted_date = DATE_FORMAT(today, '%Y%m%d');
    IF EXISTS (SELECT 1 FROM daily_counter WHERE code = p_code AND date = today) THEN
        UPDATE daily_counter
        SET counter = counter + 1
        WHERE code = p_code AND date = today;
        SELECT counter INTO current_counter FROM daily_counter WHERE code = p_code AND date = today;
    ELSE
        INSERT INTO daily_counter (code, date, counter) VALUES (p_code, today, 1);
        SET current_counter = 1;
    END IF;
    SET next_number = CONCAT(p_code, '-', formatted_date, LPAD(current_counter, 3, '0'));
END //

DELIMITER ;

